title: “Estrutura dos Resultados” output: html_document date: “2023-05-20” —
source(here::here("R/minhas_funcoes.R"))
Attaching package: ‘dplyr’
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
Carregando pacotes exigidos: ggplot2
here() starts at /home/usuario/Documentos/Vitor/Piper3D/WWF/Monitora/Dados/Monitora/Monitora/piper3d_monitora_florestal
Attaching package: ‘lubridate’
The following objects are masked from ‘package:base’:
date, intersect, setdiff, union
Attaching package: ‘plotly’
The following object is masked from ‘package:ggplot2’:
last_plot
The following object is masked from ‘package:stats’:
filter
The following object is masked from ‘package:graphics’:
layout
A seguir, apresentamos o fluxo de análise dos dados que envolve a fase exploratória, truncamento, ajuste e avaliação de modelos e estimativas de abundância e densidade para as espécies que selecionamos como modelo. Usamos como critérios de seleção tanto o número de ocorrências por Unidade de Conservação quanto a distribuição das frequências de observação, nos casos em que isso foi possível. De forma geral, as espécies com número satisfatório de ocorrências (>60), apresentaram pico de observações próximos a zero.
Para todas as espécies modelo, nós implementamos duas estratégias para lidar com os efeitos indesejados nos dados: pico próximo a zero (heaping near zero) e número excessivo de repetições amostrais na mesma trilha. Para lidar com os picos, testamos o uso dos dados com distâncias exatas e distâncias agrupadas. Para lidar com as repetições, testamos a análise dos dados com todas as repetições e com o número de repetições reduzidas.
Especies com maior numero de ocorrencias/UC possibilitam testar, posteriormente, estratificações nos dados, preservando um número de ocorrências satisfatório dentro dos estratos. Por isso começamos apresentando um fluxo completo de análise, incluindo Amostragem por Distância Convencional, Amostragem por Distância com Múltiplas Covariáveis e Amostragem por Distância com Estratificação nos dados com as espécies com maior número de ocorrência.
Fonte: biolib.cz
Essa é a espécie com o mair número de ocorrências para uma mesma UC. Apresentou, como a maioria das espécies em diferentes UCs, um pico de ocorrências próximo a zero.
Para selecionar do conjunto de dados da espécie e a Unidade de
conservação de interesse, usar a função
transforma_para_distanceR_com_repeticao_filtra_uc_sp(),
especificando o nome da Unidade de conservação através do argumento
nome_uc e o nome da espécie através do argumento
nome_sp.
# carregar dados
cutia_tap_arap <- transforma_para_distanceR_com_repeticao_filtra_uc_sp(
nome_uc = "Resex Tapajos-Arapiuns",
nome_sp = "Dasyprocta croconota"
)
cutia_tap_arap
O histograma interativo está disponível no app em Shiny
app_distancia_interativo.R. A distribuição dos dados no
histograma permite observar um pico de observações próximo a zero, além
de uma considerável perda em detectabilidade a partir dos 20m. Vamos
testar diferentes proporções de truncamento.
cutia_tap_arap |>
drop_na(distance) |>
plotar_distribuicao_distancia_interativo(largura_caixa = 1)
Warning: Continuous y aesthetic
ℹ did you forget `aes(group = ...)`?
Vamos explorar diferentes distâncias de truncamento para um mesmo modelo de distribuição half-normal. Optamos por truncar os dados pela percentagem para padronizar a rotina para diferentes espécies. Buckland et al. (2001) sugere um corte entre 5-10% das observações detectadas nas maiores distãncias. Vamos selecionar o valor de corte pelo modelo com melhor ajuste.
# conduz a selecao da melhor distancia de truncamento a partir do ajsute de modelos com funcao de deteccao half-normal sem termos de ajuste
cutia_tap_arap_dist_trunc <- cutia_tap_arap |>
selecionar_distancia_truncamento()
Fitting half-normal key function
AIC= 4676.418
Fitting half-normal key function
AIC= 5354.545
Fitting half-normal key function
AIC= 5791.182
Fitting half-normal key function
AIC= 6375.771
Fitting half-normal key function
AIC= 7212.428
cutia_tap_arap_dist_trunc$selecao
Histogramas resultantes dos modelos, com todas as distâncias de truncagem, para auxiliar na seleção da melhor distãncia.
plotar_funcao_deteccao_selecao_distancia_truncamento(cutia_tap_arap_dist_trunc)
$`25%`
NULL
$`20%`
NULL
$`15%`
NULL
$`10%`
NULL
$`5%`
NULL
# ajustando a função de detecção uniforme para um truncamento de 25% dos dados
cutia_tap_arap_unif <- cutia_tap_arap |>
ajuste_modelos_distance_unif(truncamento = "10%")
Starting AIC adjustment term selection.
Fitting uniform key function
AIC= 6586.595
Fitting uniform key function with cosine(1) adjustments
AIC= 6363.157
Fitting uniform key function with cosine(1,2) adjustments
AIC= 6357.69
Fitting uniform key function with cosine(1,2,3) adjustments
Warning: Detection function is not strictly monotonic!AIC= 6328.133
Fitting uniform key function with cosine(1,2,3,4) adjustments
Warning: Detection function is not strictly monotonic!AIC= 6295.384
Fitting uniform key function with cosine(1,2,3,4,5) adjustments
Warning: Detection function is not strictly monotonic!AIC= 6288.133
Warning: Detection function is not strictly monotonic!Starting AIC adjustment term selection.
Fitting uniform key function
AIC= 6586.595
Fitting uniform key function with simple polynomial(2) adjustments
AIC= 6410.42
Fitting uniform key function with simple polynomial(2,4) adjustments
Warning: Detection function is not strictly monotonic!AIC= 6367.003
Fitting uniform key function with simple polynomial(2,4,6) adjustments
Warning: Detection function is not strictly monotonic!AIC= 6363.953
Fitting uniform key function with simple polynomial(2,4,6,8) adjustments
Warning: Detection function is not strictly monotonic!AIC= 6364.18
Uniform key function with simple polynomial(2,4,6) adjustments selected.
Warning: Detection function is not strictly monotonic!
# ajustando a função de detecção half-normal para um truncamento de 25% dos dados
cutia_tap_arap_hn <- cutia_tap_arap |>
ajuste_modelos_distance_hn(truncamento = "10%")
Fitting half-normal key function
AIC= 6375.771
Starting AIC adjustment term selection.
Fitting half-normal key function
AIC= 6375.771
Fitting half-normal key function with cosine(2) adjustments
AIC= 6349.7
Fitting half-normal key function with cosine(2,3) adjustments
Warning: Detection function is not strictly monotonic!AIC= 6321.849
Fitting half-normal key function with cosine(2,3,4) adjustments
Warning: Detection function is not strictly monotonic!AIC= 6293.72
Fitting half-normal key function with cosine(2,3,4,5) adjustments
Warning: Detection function is not strictly monotonic!AIC= 6282.534
Fitting half-normal key function with cosine(2,3,4,5,6) adjustments
Warning: Detection function is not strictly monotonic!AIC= 6220.852
Warning: Detection function is not strictly monotonic!Starting AIC adjustment term selection.
Fitting half-normal key function
AIC= 6375.771
Fitting half-normal key function with Hermite(4) adjustments
AIC= 6377.362
Half-normal key function selected.
# ajustando a função de detecção hazard-rate para um truncamento de 25% dos dados
cutia_tap_arap_hr <- cutia_tap_arap |>
ajuste_modelos_distance_hr(truncamento = "10%")
Fitting hazard-rate key function
Warning: Estimated hazard-rate scale parameter close to 0 (on log scale). Possible problem in data (e.g., spike near zero distance).AIC= 6048.452
Warning: Estimated hazard-rate scale parameter close to 0 (on log scale). Possible problem in data (e.g., spike near zero distance).Starting AIC adjustment term selection.
Fitting hazard-rate key function
Warning: Estimated hazard-rate scale parameter close to 0 (on log scale). Possible problem in data (e.g., spike near zero distance).AIC= 6048.452
Fitting hazard-rate key function with cosine(2) adjustments
Warning: Estimated hazard-rate scale parameter close to 0 (on log scale). Possible problem in data (e.g., spike near zero distance).Warning: Model fitting did not converge. Try different initial values or different model
Model failed to converge.
Hazard-rate key function selected.
Warning: Estimated hazard-rate scale parameter close to 0 (on log scale). Possible problem in data (e.g., spike near zero distance).Starting AIC adjustment term selection.
Fitting hazard-rate key function
Warning: Estimated hazard-rate scale parameter close to 0 (on log scale). Possible problem in data (e.g., spike near zero distance).AIC= 6048.452
Fitting hazard-rate key function with simple polynomial(4) adjustments
Warning: Estimated hazard-rate scale parameter close to 0 (on log scale). Possible problem in data (e.g., spike near zero distance).Warning: Model fitting did not converge. Try different initial values or different model
Model failed to converge.
Hazard-rate key function selected.
Warning: Estimated hazard-rate scale parameter close to 0 (on log scale). Possible problem in data (e.g., spike near zero distance).
lista_modelos_ajustados <- list(
`half-normal` = cutia_tap_arap_hn,
`hazard-rate` = cutia_tap_arap_hr,
uniforme = cutia_tap_arap_unif
)
selecao_funcao_deteccao_termo_ajsute <- selecionar_funcao_deteccao_termo_ajuste(lista_modelos_ajustados)
selecao_funcao_deteccao_termo_ajsute
Sugestão: adicionar título ao gráficos gerar graficos usando ggplot2
# gerar uma lista com os modelos selecionados ordenados do melhor para o pior modelo
modelos_selecionados <- list(
cutia_tap_arap_hr$`Sem termo`,
cutia_tap_arap_hn$Cosseno,
cutia_tap_arap_unif$Cosseno,
cutia_tap_arap_unif$`Polinomial simples`,
cutia_tap_arap_hn$`Sem termo`
)
# atribuir o nome dos modelos aos itens da lista
names(modelos_selecionados) <- selecao_funcao_deteccao_termo_ajsute$Model
# plotar a probabilidade de detecção observada (barras) e a esperada (linhas e pontos)
plotar_funcao_deteccao_modelos_selecionados(modelos_selecionados)
$`Hazard-rate`
NULL
$`Half-normal with cosine adjustment terms of order 2,3,4,5,6`
NULL
$`Uniform with cosine adjustment terms of order 1,2,3,4,5`
NULL
$`Uniform with simple polynomial adjustment terms of order 2,4,6`
NULL
$`Half-normal`
NULL
bondade_ajuste_fluxo1 <- testar_bondade_ajuste(modelos_selecionados, plot = TRUE)
bondade_ajuste_fluxo1
Sugestão de aperfeiçoamento das funções: gerar uma única tabela a
partir de um funções join e rbind() das
tabelas geradas por cada função, adicionando uma coluna que identifica
cada um dos modelos.
# gera lista contendo os modelos selecionados para cada função de detecção e termo de ajuste
lista_modelos_ajustados_termos <- list(
cutia_tap_arap_hr$`Sem termo`,
cutia_tap_arap_hn$Cosseno,
cutia_tap_arap_unif$Cosseno,
cutia_tap_arap_unif$`Polinomial simples`,
cutia_tap_arap_hn$`Sem termo`
)
# área de estudo, tamanho da área de estudo, area coberta pelo esforço amostral, esforço amostral em metros, número de detecções, número de transectos (ea), taxa de encontro, coeficiente de variação da taxa de encontro
caracteristicas_area_estudo_taxa_encontro <- lista_modelos_ajustados_termos |>
gerar_caracteristicas_area_estudo_taxa_encontro(resultado_selecao_modelos = selecao_funcao_deteccao_termo_ajsute)
caracteristicas_area_estudo_taxa_encontro
# área de estudo, tamanho da área de estudo, trilhas ou estações amostrais, esforço total em cada trilha, abundância estimada em cada estação amostral, número de detecções em cada estação amostral, área total amostrada
caracteristicas_esforco_abundancia_deteccao <- lista_modelos_ajustados_termos |>
gerar_caracteristicas_esforco_abundancia_deteccao(resultado_selecao_modelos = selecao_funcao_deteccao_termo_ajsute)
caracteristicas_esforco_abundancia_deteccao
# total, densidade estimada, erro padrão da densidade destimada, coeficiente de variação da densidade destimada, intervalo de confiança inferior e superior do coeficiente de variação, gruas de liberdade
caracteristicas_densidade <- lista_modelos_ajustados_termos |>
gerar_caracteristicas_densidade(resultado_selecao_modelos = selecao_funcao_deteccao_termo_ajsute)
caracteristicas_densidade
dados_selecionados <- carregar_dados_selecionados()
cutia_tap_arap_quase_sem_repeticao <- transforma_para_dsitanceR_quase_sem_repeticao_filtra_uc_sp(
dados = dados_selecionados,
nome_uc = "Resex Tapajos-Arapiuns",
nome_sp = "Dasyprocta croconota"
)
cutia_tap_arap_quase_sem_repeticao
O histograma interativo está disponível no app em Shiny
app_distancia_interativo.R. A distribuição dos dados no
histograma permite observar um pico de observações próximo a zero, além
de uma considerável perda em detectabilidade a partir dos 20m. Vamos
testar diferentes proporções de truncamento.
cutia_tap_arap_quase_sem_repeticao |>
drop_na(distance) |>
plotar_distribuicao_distancia_interativo(largura_caixa = 1)
Warning: Continuous y aesthetic
ℹ did you forget `aes(group = ...)`?
Vamos explorar diferentes distâncias de truncamento para um mesmo modelo de distribuição half-normal. Optamos por truncar os dados pela percentagem para padronizar a rotina para diferentes espécies. Buckland et al. (2001) sugere um corte entre 5-10% das observações detectadas nas maiores distãncias. Vamos selecionar o valor de corte pelo modelo com melhor ajuste.
plotar_funcao_deteccao_selecao_distancia_truncamento(cutia_tap_arap_quase_sem_repeticao_dist_trunc)
$`25%`
NULL
$`20%`
NULL
$`15%`
NULL
$`10%`
NULL
$`5%`
NULL
O histograma interativo está disponível no app em Shiny
app_distancia_interativo.R. A distribuição dos dados no
histograma permite observar um pico de observações próximo a zero, além
de uma considerável perda em detectabilidade a partir dos 20m. Vamos
testar diferentes proporções de truncamento.
Vamos explorar diferentes distâncias de truncamento para um mesmo modelo de distribuição half-normal. Optamos por truncar os dados pela percentagem para padronizar a rotina para diferentes espécies. Buckland et al. (2001) sugere um corte entre 5-10% das observações detectadas nas maiores distãncias. Vamos selecionar o valor de corte pelo modelo com melhor ajuste.
O histograma interativo está disponível no app em Shiny
app_distancia_interativo.R. A distribuição dos dados no
histograma permite observar um pico de observações próximo a zero, além
de uma considerável perda em detectabilidade a partir dos 20m. Vamos
testar diferentes proporções de truncamento.
Vamos explorar diferentes distâncias de truncamento para um mesmo modelo de distribuição half-normal. Optamos por truncar os dados pela percentagem para padronizar a rotina para diferentes espécies. Buckland et al. (2001) sugere um corte entre 5-10% das observações detectadas nas maiores distãncias. Vamos selecionar o valor de corte pelo modelo com melhor ajuste.
Após testar as quatro estratégias anteriores para lidar com efeitos indesejados nos dados, escolhemos a estratégia com melhores resultados, considerando a bondade de ajuste dos modelos e os coeficientes de variação das estimativas de abundância e densidade, para adicionar covariávies. Consideramos, com base nos dados do Programa Monitora, duas covariáveis. A primeira dela, tamanho do grupo. De forma geral, pode existir uma tendência a um viés no tamanho do grupo com a distância, com a perda de detectabilidade para grupos menores. Além disso, o tamanho do grupo também é utilizado para corrigir as estimativas de abudância e densidade. A outra covariável criamos a partir dos dados de horário de início e horário de registro das espécies, calculando os minutos após o início da amostragem. Muitas espécies variam sua atividade ao longo do dia, e podem ser mais ou menos detectáveis de acordo com o horário.
Para o uso de coveriáveis, podemos usar somente as distribuições half-normal ou hazard-rate, pois ambas possuem o parâmetro escalar pelo qual o vetor das covariáveis será multiplicado. Não é recomendável o uso de termos de ajuste com o uso de covariáveis pela grande chance de perda de monotonicidade nas curvas das funções de detecção. Assim, vamos trabalhar com as seguintes combinações de modelos
Para o uso de covariáveis, as estimativas de abundância/densidade devem ser feitas através do bootstrap.
O uso da estratificação, no caso dos dados do progama monitora, pode
ser usado a partir de duas abordagens. A primeira delas seria focada na
dinâmica populacional, para estimar abundâncias e densidades em períodos
amostrais diferentes e acompanhar o tamanho da população ao longo do
tempo. Para essa abordagem, estratificar os dados por ano permite que
sejam feitas estas estimativas. O pacote Distance para o R é mais
limitado que o programa Distance para o Windows em termos de opções de
comando para estratificar os dados por amostragem, e entende a
estratificação através da variável Region.Label, usada para
informar estratificação espacial. Como a nossa intenção é estratificar
por ano, vamos inserir os anos como estratos na variável
Region.Label, assumindo que se tratam de amostras
diferentes, pois nosso interesse está na variação nos dados,
independente da fonte de variação ser espacial ou temporal.
Uma outra abordagem possível é usar a estratificação espacial. No caso dos dados do Programa Monitora, a variação entre as UCs para uma mesma espécie parece ser mais relevante que a variação dentro de uma mesma UC, pois entendemos que não há um desenho amostral sistematizado para a distriubuição das Estações Amostrais em cada UC que justifique testar hipóteses sobre variação nas abundâncias e densidades. Assim, optamos por usar a estratificação espacial para dados de uma mesma espécie em diferentes UCs. Exploramos em maiores detalhes as duas abordagens a seguir.
Antes de ajustar os modelos e gerar as estimativas, é importante verificar o número de ocorrências dentro de cada ano. Pois, ao estratificar, ajustaremos uma função de detecção para cada estrato.
Tabela com dados filtrados. Tabela dinâmica disponível na Parte XXX
Até agora, exploramos diferentes abordagens para a Amostragem por Distância convencional e com o uso de Múltiplas Covariávies, e selecionamos o modelo que melhor se ajustou aos dados. Nesta etapa, não vamos testar novos modelos de ajuste. Iremos ajustar o melhor modelo do fluxo anterior aos dados estratificados.
Para o uso de covariáveis, as estimativas de abundância/densidade devem ser feitas através do bootstrap.
Aqui, vamos explorar para uma mesma espécie, dados de diferentes Unidades de Conservação ao mesmo tempo.
Antes de ajustar os modelos e gerar as estimativas, é importante verificar o número de ocorrências dentro de cada UC. Pois, ao estratificar, ajustaremos uma função de detecção para cada estrato. Caso tenham UCs com um número muito baixo de ocorrências (<30), considerar não incluir na análise.
Tabela com dados filtrados. Tabela dinâmica disponível na Parte XXX
O histograma interativo está disponível no app em Shiny
app_distancia_interativo.R. A distribuição dos dados no
histograma permite observar um pico de observações próximo a zero, além
de uma considerável perda em detectabilidade a partir dos 20m. Vamos
testar diferentes proporções de truncamento.
Vamos explorar diferentes distâncias de truncamento para um mesmo modelo de distribuição half-normal. Optamos por truncar os dados pela percentagem para padronizar a rotina para diferentes espécies. Buckland et al. (2001) sugere um corte entre 5-10% das observações detectadas nas maiores distãncias. Vamos selecionar o valor de corte pelo modelo com melhor ajuste.
#AQUI A GENTE PRECISA TOMAR UMA DECISÃO IMPORTANTE
É necessário testar os quatro fluxos: todas/poucas repetições x distancias exatas/agrupadas? Preciso ver os resultados dos fluxos anteriores para planejar melhor esta etapa.
Para a estratificação, vamos testar diretamento os modelos com e sem covariáveis. Vamos nos limitar às distribuições half-normal e hazard-rate, pois são as únicas que comportam o uso das covariáveis.
Para modelos com covariáveis as estimativas de abundância e densidade devem ser feitas por bootstrap
A redução no tamanho amostral geralmente faz com que os modelos para os dados globais tenham um ajuste melhor que os modelos ajustados aos estratos. Um critério para avaliar este ajuste é comparar o somatório dos valores de AIC para cada estrato com o valor de AIC do modelo global. Se a soma dos valores de AIC dos estratos for menor que o AIC global, significa que o ajuste foi melhor para os dados estratificados.
#AQUI TAMBÉM PRECISA TOMAR UMA DECISÃO IMPORTANTE
Rodamos todos os modelos para os dados estratificados? Ou partimos do melhor modelo para dados globais?
Olhar também valores brutos de AIC dos modelos globais e comparar com os estratificados.
This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.
plot(cars)
Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.
When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).
The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.